package ninth.同步与死锁.使用同步解决问题;

/**
 * 除了可以将需要的代码设置成同步代码块之外 也可以使用synchronized关键字将一个方法声明成同步方法
 *
 * 同步方法格式：
 *  synchronized 方法返回值 方法名称(参数列表){
 *      //方法体
 *  }
 */
class MT2 implements Runnable{
    private int ticket = 5;

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            this.sale();
        }
    }
    synchronized void sale() {
        if(ticket>0){
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("卖票：ticket="+ticket--);
        }

    }
}
public class 使用同步方法解决以上问题 {
    public static void main(String[] args) {
        MT2 mt = new MT2();//定义线程对象
        Thread t1 = new Thread(mt);
        Thread t2 = new Thread(mt);
        Thread t3 = new Thread(mt);
        t1.start();
        t2.start();
        t3.start();
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=59016:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 ninth.同步与死锁.使用同步解决问题.使用同步方法解决以上问题
卖票：ticket=5
卖票：ticket=4
卖票：ticket=3
卖票：ticket=2
卖票：ticket=1

Process finished with exit code 0
 */